package admin

import (
	"github.com/gin-gonic/gin"
	"mojieshi/define"
	"mojieshi/models"
	"net/http"
	"strconv"
	"time"
)

// 获取金刚区栏目
func JinGangCateList(c *gin.Context) {
	var jsonData Newdata
	err := c.ShouldBindJSON(&jsonData)
	if err != nil {
		define.Response.ResultFail(c, 10000, define.JsonData, "")
		return
	}
	var list []models.MJinCate
	var count int64
	if jsonData.Page == 0 {
		jsonData.Page = -1
	}
	if jsonData.Limit == 0 {
		jsonData.Limit = -1
	}
	offsetVal := (jsonData.Page - 1) * jsonData.Limit
	if jsonData.Page == -1 && jsonData.Limit == -1 {
		offsetVal = -1
	}
	tx := models.DB.Model(new(models.MJinCate)).Where("aid=? AND name LIKE ? AND sub_name LIKE ?", jsonData.Aid, "%"+jsonData.Name+"%", "%"+jsonData.SubName+"%")
	if jsonData.Id > 0 {
		tx = tx.Where("id=?", jsonData.Id)
	}
	if jsonData.Status > 0 {
		tx = tx.Where("hidden=?", jsonData.Status)
	}
	tx = tx.Count(&count).Limit(jsonData.Limit).Offset(offsetVal).Find(&list)
	if err != nil {
		define.Response.ResultFail(c, 10001, err.Error(), "")
		return
	}
	c.JSON(http.StatusOK, gin.H{
		"success": true,
		"code":    0,
		"data": map[string]interface{}{
			"list":  list,
			"count": count,
		},
	})
}

// 新增/修改金刚区栏目
func JinGangCateAdd(c *gin.Context) {
	//获取传值
	var jsonData models.MJinCate
	err := c.ShouldBindJSON(&jsonData)
	if err != nil {
		c.JSON(http.StatusOK, gin.H{
			"code": 10000,
			"msg":  err,
		})
		return
	}
	if jsonData.ID > 0 {
		//修改数据
		var editData = map[string]interface{}{
			"name":       jsonData.Name,
			"hidden":     jsonData.Hidden,
			"sub_name":   jsonData.SubName,
			"updated_at": int(time.Now().Unix()),
		}
		err = models.DB.Model(new(models.MJinCate)).Where("id=?", jsonData.ID).Updates(&editData).Error
		if err != nil {
			c.JSON(http.StatusOK, gin.H{
				"code": 10003,
				"msg":  err.Error(),
			})
			return
		}
		//写入日志
		userId, _ := strconv.Atoi(c.GetHeader("userId")) //将字符串转为int
		userName, bid := models.UserName(userId)
		logData := "管理员：" + userName + "，修改了金刚区栏目:" + strconv.Itoa(jsonData.ID) + "的内容"
		models.LogAdd(3, "修改金刚区栏目", userId, logData, bid, jsonData.Aid)
	} else {
		var data models.MJinCate
		data.Name = jsonData.Name
		data.Hidden = jsonData.Hidden
		data.Aid = jsonData.Aid
		data.SubName = jsonData.SubName
		data.CreatedAt = int(time.Now().Unix())
		err = models.DB.Model(new(models.MJinCate)).Create(&data).Error
		if err != nil {
			c.JSON(http.StatusOK, gin.H{
				"code": 10001,
				"msg":  err.Error(),
			})
			return
		}
		//写入日志
		userId, _ := strconv.Atoi(c.GetHeader("userId")) //将字符串转为int
		userName, bid := models.UserName(userId)
		logData := "管理员：" + userName + "，新增了一个金刚区栏目:" + jsonData.Name
		models.LogAdd(2, "新增金刚区栏目", userId, logData, bid, jsonData.Aid)
	}
	c.JSON(http.StatusOK, gin.H{
		"success": true,
		"code":    0,
		"msg":     "成功！",
	})
}

// 删除金刚区栏目
func JinGangCateDel(c *gin.Context) {
	var jsonData models.MJinCate
	err := c.ShouldBindJSON(&jsonData)
	if err != nil {
		c.JSON(http.StatusOK, gin.H{
			"code": 10000,
			"msg":  err,
		})
		return
	}
	var data models.MJinCate
	models.DB.Model(new(models.MJinCate)).Where("id=?", jsonData.ID).First(&data)
	tx := models.DB.Begin()

	//删除
	err = tx.Where("jid=?", jsonData.ID).Delete(models.MJingang{}).Error
	if err != nil {
		c.JSON(http.StatusOK, gin.H{
			"code": 10004,
			"msg":  err.Error(),
		})
		tx.Rollback()
		return
	}
	err = tx.Delete(&models.MJinCate{}, jsonData.ID).Error
	if err != nil {
		c.JSON(http.StatusOK, gin.H{
			"code": 10004,
			"msg":  err.Error(),
		})
		tx.Rollback()
		return
	}
	tx.Commit()

	//写入日志
	userId, _ := strconv.Atoi(c.GetHeader("userId")) //将字符串转为int
	userName, bid := models.UserName(userId)
	logData := "管理员：" + userName + "，删除了一个金刚区栏目:" + data.Name
	models.LogAdd(4, "删除金刚区栏目", userId, logData, bid, jsonData.Aid)
	c.JSON(http.StatusOK, gin.H{
		"success": true,
		"code":    0,
		"msg":     "成功！",
	})
}

// 获取金刚区
func JinGangList(c *gin.Context) {
	var jsonData Newdata
	err := c.ShouldBindJSON(&jsonData)
	if err != nil {
		define.Response.ResultFail(c, 10000, define.JsonData, "")
		return
	}
	var list []models.MJingang
	var count int64
	if jsonData.Page == 0 {
		jsonData.Page = -1
	}
	if jsonData.Limit == 0 {
		jsonData.Limit = -1
	}
	offsetVal := (jsonData.Page - 1) * jsonData.Limit
	if jsonData.Page == -1 && jsonData.Limit == -1 {
		offsetVal = -1
	}
	tx := models.DB.Model(new(models.MJingang)).Where("aid=? AND name LIKE ? AND sub_name LIKE ?", jsonData.Aid, "%"+jsonData.Name+"%", "%"+jsonData.SubName+"%")
	if jsonData.Id > 0 {
		tx = tx.Where("id=?", jsonData.Id)
	}
	if jsonData.Jid > 0 {
		tx = tx.Where("jid=?", jsonData.Jid)
	}
	if jsonData.Status > 0 {
		tx = tx.Where("hidden=?", jsonData.Status)
	}
	tx = tx.Count(&count).Limit(jsonData.Limit).Offset(offsetVal).Order("sort ASC,id").Find(&list)
	if err != nil {
		define.Response.ResultFail(c, 10001, err.Error(), "")
		return
	}
	c.JSON(http.StatusOK, gin.H{
		"success": true,
		"code":    0,
		"data": map[string]interface{}{
			"list":  list,
			"count": count,
		},
	})
}

// 新增/修改金刚区
func JinGangAdd(c *gin.Context) {
	//获取传值
	var jsonData models.MJingang
	err := c.ShouldBindJSON(&jsonData)
	if err != nil {
		c.JSON(http.StatusOK, gin.H{
			"code": 10000,
			"msg":  err,
		})
		return
	}
	if jsonData.ID > 0 {
		//修改数据
		var editData = map[string]interface{}{
			"name":       jsonData.Name,
			"hidden":     jsonData.Hidden,
			"sub_name":   jsonData.SubName,
			"icon":       jsonData.Icon,
			"page":       jsonData.Page,
			"parameter":  jsonData.Parameter,
			"type":       jsonData.Type,
			"type_id":    jsonData.TypeId,
			"url_type":   jsonData.UrlType,
			"updated_at": int(time.Now().Unix()),
		}
		err = models.DB.Model(new(models.MJingang)).Where("id=?", jsonData.ID).Updates(&editData).Error
		if err != nil {
			c.JSON(http.StatusOK, gin.H{
				"code": 10003,
				"msg":  err.Error(),
			})
			return
		}
		//写入日志
		userId, _ := strconv.Atoi(c.GetHeader("userId")) //将字符串转为int
		userName, bid := models.UserName(userId)
		logData := "管理员：" + userName + "，修改了金刚区:" + strconv.Itoa(jsonData.ID) + "的内容"
		models.LogAdd(3, "修改金刚区", userId, logData, bid, jsonData.Aid)
	} else {
		var data models.MJingang
		data.Name = jsonData.Name
		data.Hidden = jsonData.Hidden
		data.Aid = jsonData.Aid
		data.Jid = jsonData.Jid
		data.SubName = jsonData.SubName
		data.Icon = jsonData.Icon
		data.Page = jsonData.Page
		data.Parameter = jsonData.Parameter
		data.Type = jsonData.Type
		data.TypeId = jsonData.TypeId
		data.UrlType = jsonData.UrlType
		data.Sort = 0
		data.CreatedAt = int(time.Now().Unix())
		err = models.DB.Model(new(models.MJingang)).Create(&data).Error
		if err != nil {
			c.JSON(http.StatusOK, gin.H{
				"code": 10001,
				"msg":  err.Error(),
			})
			return
		}
		//写入日志
		userId, _ := strconv.Atoi(c.GetHeader("userId")) //将字符串转为int
		userName, bid := models.UserName(userId)
		logData := "管理员：" + userName + "，新增了一个金刚区:" + jsonData.Name
		models.LogAdd(2, "新增金刚区", userId, logData, bid, jsonData.Aid)
	}
	c.JSON(http.StatusOK, gin.H{
		"success": true,
		"code":    0,
		"msg":     "成功！",
	})
}

// 删除金刚区
func JinGangDel(c *gin.Context) {
	var jsonData models.MJingang
	err := c.ShouldBindJSON(&jsonData)
	if err != nil {
		c.JSON(http.StatusOK, gin.H{
			"code": 10000,
			"msg":  err,
		})
		return
	}
	var data models.MJingang
	models.DB.Model(new(models.MJingang)).Where("id=?", jsonData.ID).First(&data)
	tx := models.DB.Begin()

	//删除
	err = tx.Delete(&models.MJingang{}, jsonData.ID).Error
	if err != nil {
		c.JSON(http.StatusOK, gin.H{
			"code": 10004,
			"msg":  err.Error(),
		})
		tx.Rollback()
		return
	}
	tx.Commit()

	//写入日志
	userId, _ := strconv.Atoi(c.GetHeader("userId")) //将字符串转为int
	userName, bid := models.UserName(userId)
	logData := "管理员：" + userName + "，删除了一个金刚区:" + data.Name
	models.LogAdd(4, "删除金刚区", userId, logData, bid, jsonData.Aid)
	c.JSON(http.StatusOK, gin.H{
		"success": true,
		"code":    0,
		"msg":     "成功！",
	})
}

// 金刚区排序
func JinGangSort(c *gin.Context) {
	//接收id
	var jsonData models.MJingang
	err := c.ShouldBindJSON(&jsonData)
	if err != nil {
		c.JSON(http.StatusOK, gin.H{
			"code": 10000,
			"msg":  err,
		})
		return
	}
	var data models.MJingang
	models.DB.Model(new(models.MJingang)).Where("id=?", jsonData.ID).First(&data)
	//修改
	err = models.DB.Model(new(models.MJingang)).Where("id=?", jsonData.ID).Update("sort", jsonData.Sort).Error
	if err != nil {
		c.JSON(http.StatusOK, gin.H{
			"code": 10002,
			"msg":  err.Error(),
		})
		return
	}
	//写入日志
	userId, _ := strconv.Atoi(c.GetHeader("userId")) //将字符串转为int
	userName, bid := models.UserName(userId)
	logData := "管理员：" + userName + "，修改金刚区:" + data.Name + "的排序"
	models.LogAdd(5, "金刚区排序", userId, logData, bid, jsonData.Aid)
	c.JSON(http.StatusOK, gin.H{
		"success": true,
		"code":    0,
		"msg":     "成功！",
	})
}
